// import CoinbaseWalletSDK from "@coinbase/wallet-sdk";
import WalletConnectProvider from "@walletconnect/web3-provider";
// import Fortmatic from "fortmatic";
// import {FORTMATIC_API_KEY, PORTIS_API_KEY} from "@/utils/constants";
// import Authereum from "authereum";
// import Portis from "@portis/web3";
import Web3Modal from "web3modal";
import useContractHook from "@/hooks/Contract";
import useWalletHook from "@/hooks/Wallet";

const {startPolling} = useContractHook()

export function initializeWeb3Model() {
  // web3model provider options
  const providerOptions = {
    // coinbasewallet: {
    //   package: CoinbaseWalletSDK,
    //   options: {
    //     appName: "Shark Dao",
    //     infuraId: import.meta.env.VITE_INFURA_API_KEY
    //   }
    // },
    walletconnect: {
      package: WalletConnectProvider,
      options: {
        rpc: {
          56: 'https://bsc-dataseed.binance.org/'
        },
        infuraId: import.meta.env.VITE_INFURA_API_KEY,
        // bridge: 'https://bridge.walletconnect.org'
      }
    },
    // fortmatic: {
    //   package: Fortmatic, // required
    //   options: {
    //     key: FORTMATIC_API_KEY, // required
    //     // network: customNetworkOptions // if we don't pass it, it will default to localhost:8454
    //   }
    // },
    // // torus: {
    // //   package: Torus, // required
    // //   options: {
    // //     // networkParams: {
    // //     //   host: "https://localhost:8545", // optional
    // //     //   chainId: 1337, // optional
    // //     //   networkId: 1337 // optional
    // //     // },
    // //     // config: {
    // //     //   buildEnv: "development" // optional
    // //     // }
    // //   }
    // // },
    // // mewconnect: {
    // //   package: MewConnect, // required
    // //   options: {
    // //     infuraId: import.meta.env.VITE_INFURA_API_KEY // required
    // //   }
    // // },
    // opera: {
    //   package: true
    // },
    // authereum: {
    //   package: Authereum // required
    // },
    // portis: {
    //   package: Portis, // required
    //   options: {
    //     id: PORTIS_API_KEY // required
    //   }
    // },
    // binancechainwallet: {
    //   package: true
    // }
  };

  return new Web3Modal({
    cacheProvider: true, // optional
    providerOptions // required
  });
}

export function onConnectListener() {
  // subscribe to connected account change
  const {connect, resetState} = useWalletHook()
  // @ts-ignore
  window.ethereum.on("accountsChanged", async (accounts: string[]) => {
    console.log('account change')
    console.log('accounts:', accounts[0])
    if (accounts) {
      // walletStore.setConnectStatus(true)
      // walletStore.setWalletAddress(accounts[0])
      await connect()
    } else {
      resetState()
    }

    // 重新获取后端的api token
    await startPolling()
    location.reload()
  });
  // @ts-ignore
  window.ethereum.on('disconnect', () => {
    localStorage.clear()
    location.reload()
  })
  // // Subscribe to session disconnection
  // window.ethereum.on("disconnect", async (code: number, reason: string) => {
  //   console.log('disconnect change')
  //   console.log(code, reason)
  //   await walletStore.disconnectWallet()
  // })
}
